/* 
 * Copyright (c) 2012, Texas Instruments Incorporated
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * *  Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * *  Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * *  Neither the name of Texas Instruments Incorporated nor the names of
 *    its contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * */
/*
 * ======== DEV.xs ========
 */

var DEV = null;

/*
 * ======== module$use ========
 */
function module$use()
{
    DEV = this;
}

/*
 * ======== module$static$init ========
 */
function module$static$init(mod, params)
{
    var i;

    mod.table.length = DEV.tableSize;

    for (i = 0; i < DEV.tableSize; i++) {
        mod.table[i] = null;
    } 
}

/*
 *  ======== instance$static$init ========
 */
function instance$static$init(obj, name, fxns, params)
{
    if (name == null) {
        DEV.$logError("name cannot be null", this);
    }
    
    if (fxns == null) {
        DEV.$logError("fxns cannot be null", this);
    }
    
    obj.name = name; 
    obj.fxns = fxns;
    obj.initFxn = params.initFxn; 
    obj.devid = params.devid;
    obj.deviceParams = params.deviceParams;
    
    obj.devp = 0;
}

/*
 *  ======== viewInitBasic ========
 *  Initialize the 'Basic' GIO instance view.
 */
function viewInitBasic(view, obj)
{    
    var DEV = xdc.useModule('ti.sysbios.io.DEV');
    var Program = xdc.useModule('xdc.rov.Program');

    view.name = Program.fetchString(obj.name);
    view.fxns = obj.fxns;

    /*
     * There may be more than one symbol at this address, so the function
     * name has to be an array.
     */
    view.initFxn = Program.lookupFuncName(Number(obj.initFxn));

    view.devid = obj.devid;
    view.deviceParams = obj.deviceParams;
    view.devp = obj.devp;
}
